package com.qf.business.course.controller;

import com.qf.business.course.service.CourseTypeService;
import com.qf.commons.base.result.R;
import com.qf.commons.base.result.Rs;
import com.qf.data.course.entity.CourseType;
import com.qf.data.course.vo.output.CourseTypeTreeNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * author Ken
 * create_time 2022/11/29
 */
@RestController
@RequestMapping("/course/type")
public class CourseTypeController {

    @Autowired
    private CourseTypeService courseTypeService;

    /**
     * 查询分类列表
     * @return
     */
    @RequestMapping("/list")
    public R queryList(){
        List<CourseType> courseTypes = courseTypeService.list();
        return Rs.create(courseTypes);
    }

    /**
     * 按照树状结构返回分类列表
     * @return
     */
    @RequestMapping("/treeList")
    public R treeList(){

        /*
        原始数据：
        [
            {id:1, pid:null, courseName:"IT互联网"},
            {id:2, pid:null, courseName:"创作设计"},
            {id:3, pid:1, courseName:"前沿技术"},
            {id:4, pid:2, courseName:"平面设计"},
            {id:5, pid:1, courseName:"Java开发"}
        ]
         */
        List<CourseType> courseTypes = courseTypeService.list();

        /*
        目标数据：
        [
            {id:1, label:"IT互联网", children:[
                {id:3, label:"前沿技术"},
                {id:5, label:"Java开发"}
            ]},
            {id:2, label:"创作设计", children:[
                {id:4, label:"平面设计"}
            ]}
        ]
         */
        List<CourseTypeTreeNode> nodes = new ArrayList<>();
        Map<Long, CourseTypeTreeNode> middelMap = new HashMap<>();

        //将数据库查询出来的List<CourseType>  转换成 List<CourseTypeTreeNode> nodes
        for (CourseType courseType : courseTypes) {
            //对象的转换
            CourseTypeTreeNode courseTypeTreeNode =
                    new CourseTypeTreeNode()
                            .setId(courseType.getId())
                            .setLabel(courseType.getCourseName());

            if (courseType.getPid() == null) {
                //顶级节点
                nodes.add(courseTypeTreeNode);
            } else {
                //非顶级节点，从中间Map中获取父级节点
                CourseTypeTreeNode parentNode = middelMap.get(courseType.getPid());
                if (parentNode != null) {
                    //当前节点作为子节点，放入父节点中
                    parentNode.addChildren(courseTypeTreeNode);
                }
            }

            //当前节点放入到Map集合中
            middelMap.put(courseTypeTreeNode.getId(), courseTypeTreeNode);
        }

        return Rs.create(nodes);
    }

    /**
     * 新增分类
     * @return
     */
    @RequestMapping("/insert")
    public R insert(CourseType courseType){
        courseTypeService.save(courseType);
        return Rs.create();
    }
}
